#include "ClaveChar.h"

ClaveChar::ClaveChar() {
	this->cadena = NULL;
	this->tamanio = 0;
	this->tipo = CLAVE_CHAR;
}

ClaveChar::ClaveChar(const char* unaCadena, unsigned int tamanio) {
	this->cadena = new char[tamanio];
	memcpy(this->cadena, unaCadena, tamanio);
	this->tamanio = tamanio;
	this->tipo = CLAVE_CHAR;
}

char* ClaveChar::toChar() {
	return cadena;
}

unsigned int ClaveChar::getTamanio() {
	return tamanio;
}

bool ClaveChar::operator==(Clave& acomparar1) {
	ClaveChar* acomparar = (ClaveChar*) &acomparar1;
	unsigned int i=0;
	bool iguales = false;
	if (this->getTamanio() == acomparar->getTamanio()){
		if(this->getTamanio()>0){
			while((i<tamanio)&&(acomparar->cadena[i]==cadena[i])){
				i++;
				if (i == tamanio) break;
			}
			if (i==tamanio)	iguales = true;
		} else if(getTamanio() == 0)
			iguales = true;
		else cout << "Error op CLAVE ==" << endl;
	}
	return iguales;
}

bool ClaveChar::operator>(const Clave& acomparar1) {
	//unsigned int i = 0;
	ClaveChar* acomparar = (ClaveChar*) &acomparar1;
	string s1(acomparar->cadena);
	s1 = s1.substr(0,acomparar->tamanio);
	string s2(cadena);
	s2 = s2.substr(0, this->tamanio);
	if (s2.compare(s1) > 0)
		return true;
	return false;
}

bool ClaveChar::operator>=(const ClaveChar& acomparar) {
	//unsigned int i = 0;
	string s1(acomparar.cadena);
	s1 = s1.substr(0,acomparar.tamanio);
	string s2(cadena);
	s2 = s2.substr(0, this->tamanio);
	if (s2.compare(s1) >= 0)
		return true;
	return false;
}

bool ClaveChar::operator<(const Clave& acomparar1) {
	//unsigned int i = 0;
	ClaveChar* acomparar = (ClaveChar*) &acomparar1;
	string s1(acomparar->cadena);
	s1 = s1.substr(0,acomparar->tamanio);
	string s2(cadena);
	s2 = s2.substr(0, this->tamanio);
	if (s2.compare(s1) < 0)
		return true;
	return false;
}

bool ClaveChar::operator<=(const ClaveChar& acomparar) {
	//unsigned int i = 0;
	string s1(acomparar.cadena);
	s1 = s1.substr(0,acomparar.tamanio);
	string s2(cadena);
	s2 = s2.substr(0, this->tamanio);
	if (s2.compare(s1) <= 0)
		return true;
	return false;
}

string ClaveChar::mostrar() {
	stringstream cad;
	cad << "\"";
	cad.write(cadena, tamanio);
	cad << "\"";
	return cad.str();
}

ClaveChar::~ClaveChar() {
	if (cadena) delete[] cadena;
}
